package com.arpa.wms.service;

import com.arpa.core.web.Result;
import com.arpa.wms.domain.dto.PrepackagedDTO;
import com.arpa.wms.domain.entity.Delivery;
import com.arpa.wms.domain.entity.Prepackaged;
import com.arpa.wms.domain.vo.DeliveryVO;
import com.arpa.wms.domain.vo.PrepackagedVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 预打包单 服务类
 * </p>
 *
 * @author leo
 * @since 2021-07-02
 */
public interface IPrepackagedService extends IService<Prepackaged> {

    /**
     *  @author: rfwang
     *  @Date: 2021/7/3
     *  @Description:
     */
    Result saveWithGoods(Prepackaged entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(Prepackaged entity);

    /**
     * 通过code删除预打包主单信息
     * 同时删除预打包明细信息
     * 同时删除预打包分配信息
     * @param code 合同标识
     */
    void remove(String code);

    /**
     * 查询合计,包含总数
     *
     * @param prepackagedDTO
     * @return
     */
    PrepackagedVO queryListSum(PrepackagedDTO prepackagedDTO);

    /**
     * 查询列表
     * @param prepackagedDTO
     * @return
     */
    List<PrepackagedVO> queryList(PrepackagedDTO prepackagedDTO);

    /**
     * 获取预打包单详情
     * @param code
     * @return
     */
    PrepackagedVO getVOByCode(String code);

    Result confirm(String code);

    /**
     * 获取 预打包分配库存信息 列表
     *
     * @param itemCode
     * @return
     */
    Result queryInventory(String itemCode);

    /**
     * 取消分配
     * @param prepackagedVO
     * @return
     */
    Result cancelDistribution(PrepackagedVO prepackagedVO);

    /**
     * 预打包单分配量为0则更新状态为“待分配”
     * @param prepackagedCode
     */
    void updatePrepackagedStatusIfEmptyDistribution(String prepackagedCode);

    /**
     * 预打包生成拣货单
     * @param code
     * @return
     */
    Result genPicking(String code);

    /**
     * 更新打包数量及状态
     * @param prepackagedDTO
     * @return
     */
    int updatePackQuantityAndStatus(PrepackagedDTO prepackagedDTO);

    /**
     * 预打包任务下发
     * @param prepackagedDTO
     * @return
     */
    Result issuePrepackaged(PrepackagedDTO prepackagedDTO);

    PrepackagedVO getPrepackagedVOByEntity(Prepackaged prepackaged);

    /**
     * 更新已打包数量及状态
     * @param prepackagedDTO
     * @return
     */
    int updatePackedQuantity(PrepackagedDTO prepackagedDTO);


}
